
package Negocio;

import Persistencia.PUsuario;
import java.util.Date;
import java.util.List;


/**
 *
 * @author roberto, alvaro, javier
 */
public class Usuario {
    
    private boolean admin;
    private int id;
    private String nombre;
    private String apellidos;
    private String email;
    private String password;
    private Date   fechaNacimiento;
    private String sexo;
    private List<Bicicleta> listBicicleta;
    private String ciudad;
    private List<Usuario> listAmigos;
    private String rutaFoto;
    private List<Comentario> listComentarios;
    private Date fechaAlta;
    private boolean activo;
    
    
    //Constructor generico
    public Usuario(String nombre, String apellidos, String email, String password, Date fechaNacimiento, String sexo, String ciudad, Date fechaAlta, boolean activo) {
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.email = email;
        this.password = password;
        this.fechaNacimiento = fechaNacimiento;
        this.sexo = sexo;
        this.ciudad = ciudad;
        this.fechaAlta = fechaAlta;
    }

    //Constructor para cargar el perfil de un usuario
    public Usuario(int id, String nombre, String apellidos, String email, Date fechaNacimiento, String sexo, List<Bicicleta> listBicicleta, String ciudad, List<Usuario> amigos, String rutaFoto, Date fechaAlta, boolean activo) {
        this.id = id;
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.email = email;
        this.fechaNacimiento = fechaNacimiento;
        this.sexo = sexo;
        this.listBicicleta = listBicicleta;
        this.ciudad = ciudad;
        this.listAmigos = amigos;
        this.rutaFoto = rutaFoto;
        this.fechaAlta = fechaAlta;
    }    

    //Constructor con el que podemos dejar el objeto en otras clases como Comentario para no llevarnos toda la informacion innecesaria
    public Usuario(int id, String nombre, String apellidos, String rutaFoto) {
        this.id = id;
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.rutaFoto = rutaFoto;
    }
    
    public Usuario () {
        
    }

    public boolean isActivo() {
        return activo;
    }

    public void setActivo(boolean activo) {
        this.activo = activo;
    }   
    
    public Date getFechaAlta() {
        return fechaAlta;
    }

    public void setFechaAlta(Date fechaAlta) {
        this.fechaAlta = fechaAlta;
    }
    

    public boolean isAdmin() {
        return admin;
    }

    public void setAdmin(boolean admin) {
        this.admin = admin;
    }

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public String getCiudad() {
        return ciudad;
    }

    public void setCiudad(String ciudad) {
        this.ciudad = ciudad;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Date getFechaNacimiento() {
        return fechaNacimiento;
    }

    public void setFechaNacimiento(Date fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public List<Bicicleta> getListBicicleta() {
        return listBicicleta;
    }

    public void setListBicicleta(List<Bicicleta> listBicicleta) {
        this.listBicicleta = listBicicleta;
    }

    public List<Comentario> getListComentarios() {
        return listComentarios;
    }

    public void setListComentarios(List<Comentario> listcomentarios) {
        this.listComentarios = listcomentarios;
    }

    public List<Usuario> getListAmigos() {
        return listAmigos;
    }

    public void setListAmigos(List<Usuario> listAmigos) {
        this.listAmigos = listAmigos;
    }    
    
    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getRutaFoto() {
        return rutaFoto;
    }

    public void setRutaFoto(String rutaFoto) {
        this.rutaFoto = rutaFoto;
    }

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }
    
    public void crearUsuario (){
        PUsuario.crearUsuarioBD(this);
    }
    
    public void actualizarUsuario () {
        PUsuario.actualizarUsuarioBD(this);
    }
    
    public void eliminarUsuario () {
        PUsuario.eliminarUsuarioBD(this);
    }
    
    public static Usuario seleccionarUsuario (int id) {
        Usuario u = PUsuario.seleccionarUsuarioBD(id);
        return u;
    }
    
    public static Usuario selecionarUsuarioLite (int id) {
        Usuario u = PUsuario.seleccionarUsuarioLiteBD(id);
        return u;
    }
    
    public static Usuario selecionarUsuarioAmigo (int id) {
        Usuario u = PUsuario.seleccionarUsuarioAmigoBD(id);
        return u;
    }
    
    public static int comprobarUsuario (String login, String pass){
        return PUsuario.comprobarUsuarioBD(login, pass);
    }
    
    public static List<Usuario> buscarUsuarios(String nomape){
        return PUsuario.devolverListaUsuariosBD(nomape);
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Usuario other = (Usuario) obj;
        if (this.id != other.id) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 29 * hash + this.id;
        return hash;
    }
    
    public void anadirAmigo (Usuario amigo){
        PUsuario.anadirAmigoBD(this, amigo);        
    }
    
    public void eliminarAmigo (Usuario amigo){
        PUsuario.eliminarAmigoBD(this, amigo);        
    }
    
}
